package com.example.administrator.activitylifecycletest;

import android.content.Intent;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    public static final  String TAG="MainActivity";  //若不加上这句则会报错TAG
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,"onCreate");
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null){
            String tempData = savedInstanceState.getString("data_key");
            Log.d(TAG,tempData);
        }

        Button startNormalActivity = (Button)findViewById(R.id.start_normal_activity);
        Button startDialogActivity = (Button)findViewById(R.id.start_dialog_activity);

        startNormalActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);
            }
        });

        startDialogActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
    }

        /*
            学习活动的生存周期
           在此例中，当MainActivity第一次被创建时会依次执行onCreate()、onStart()、onResume()
           而点击第一个按钮时，启动NormalActivity,此时则会打印onPause、onStop
           这是因为此时NoremalActivity已经把主活动完全遮挡住。
           当按下Back键返回主活动，此时则会打印onRestart、onStart、onResume
           这是因此此时主活动已经进入了停止状态，之后在执行onStart()和onResume()

            点击第二个按钮，启动DialogActivity
            此时只执行了onPause()，因为这是DialogActivity没有完全遮挡主活动，主活动只是进入了暂停状态，
            并没有进入停止状态，这是按下Back，只有onResume()被执行

            最后在主活动中按下Back,依次执行onPause(),onStop()和onDestory()，最终摧毁主活动
         */
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG,"onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG,"onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG,"onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG,"onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG,"onDestory");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG,"onRestart");
    }

    /*
       这个方法可以保证在活动被回收之前一定会被调用
        因此通过这个方法来解决活动呗回收时临时数据得不到保存的问题
        putString()这个函数当中，第一个参数是键，用于后面从Bundle中取值
        第二个参数是真正要保存的数据
     */
    //？？此处不清楚是如何调用这个函数的
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String tempData = "Something you just typed";
        outState.putString("data_key",tempData);
    }
}
